package com.dingreading.cloud.admin.service;

import com.dingreading.cloud.admin.entity.WhPurchaseGoods;
import com.dingreading.cloud.common.util.PageDto;
import com.dingreading.cloud.common.util.PageUtil;
import com.mybatisflex.core.service.IService;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 服务层。
 *
 * @author Administrator
 * @since 2023-11-22
 */
public interface WhPurchaseGoodsService extends IService<WhPurchaseGoods> {

    // 实时获取最新的已入库数和剩余库存数
    PageDto<WhPurchaseGoods> pageListRealNum(PageUtil pageUtil, String keyword, Integer status, Integer type);

    // 实时获取最新的已入库数和剩余库存数
    List<WhPurchaseGoods> getByCode(String purchaseCode);

    List<WhPurchaseGoods> getBeanByCode(String purchaseCode);

    List<WhPurchaseGoods> getByCodes(List<String> purchaseCodes);

    // 实时获取最新的已入库数和剩余库存数
    WhPurchaseGoods getById(Long id);

    int dropByCodeAndNotIds(String purchaseCode, List<Long> ids);

    int dropData(String purchaseCode);

    // 设置取消
    boolean cancel(String purchaseCode);

    // 设置待入库
    boolean updateWaitIn(Long id);

    // 设置入库中
    boolean updateEntering(Long id);

    // 设置入库完成
    boolean setOk(String purchaseCode, Date time);

    long getBySupplierIdAndGoodsTypeId(Long supplierId, Long goodsTypeId);

    // 更新非实体的采购商品状态为已完成
    boolean notRealSetOk(String purchaseCode, Date time);

    boolean havesGoodsId(Long goodsId);

    boolean havesGoodsTypeId(Long goodsTypeId);

    // 获取最近一次的采购记录
    Map<Long, Double> getLastByGoodsTypeIds(List<Long> goodsTypeIds);

    List<WhPurchaseGoods> listByGoodsTypeIdIn(List<Long> goodsTypeIds);
}
